package member.model.service;

import java.sql.SQLException;
import java.util.ArrayList;

import member.exception.DuplicatedIdException;
import member.exception.DuplicatedRegisterNumberException;
import member.model.dao.MemberDAO;
import member.to.MemberTO;

public class MemberService {

	private static MemberService instance = new MemberService();
	
	private MemberDAO dao;
	private MemberService(){
		dao = MemberDAO.getInstance();
	}
	public static MemberService getInstance(){
		return instance;
	}
	
	//Business Logic을 처리하는 메소드들
	
	//회원 id로 회원을 조회해 주는 메소드.
	public MemberTO getMemberById(String id) throws SQLException{
		return dao.selectMemberById(id);
	}
	
	//가입처리 메소드
		public void joinMember(MemberTO mto) throws SQLException,
																				DuplicatedIdException,
																				DuplicatedRegisterNumberException{
			//1. 등록된 ID가 있는 지 체크
			//    - 이미 등록된 ID라면 DuplicatedIdException를 발생 시킨다.
			if(dao.selectMemberById(mto.getId())!=null){
				throw new DuplicatedIdException(mto.getId()+"는 이미 등록된 아이디입니다. ID를 변경하세요");
			}
			//2. 주민번호가 등록되있는지 체크
			//   - 이미 등록된 주민번호라면 DuplicatedRegisterNumberException를 발생시킨다.
			if(dao.selectMemberByRegisterNumber(mto.getRegisterNumber1(), mto.getRegisterNumber2())!= null){
				throw new DuplicatedRegisterNumberException("이미 가입된 주민번호 입니다.");
			}
			//3. 디비에 회원정보 등록 처리
			dao.insertMember(mto);
		}
		//전체 회원 목록 조회
		public ArrayList<MemberTO> getMemberList() throws SQLException{
			return dao.selectAllMember();
		}
		//회원 정보 수정처리
		public void modifyMember(MemberTO mto) throws SQLException, DuplicatedRegisterNumberException{
			//수정하려는 주민번호가 등록 된 것인지 체크
			if(dao.selectMemberByRegisterNumber(mto.getRegisterNumber1(),mto.getRegisterNumber2(), mto.getId()) != null){
				throw new DuplicatedRegisterNumberException("이미 등록된 주민번호입니다. 확인 후 다시 수정하십시오.");
			}
			//update 처리
			dao.updateMember(mto);
		}
		//회원 탈퇴
		public void removeMemberById(String id) throws SQLException {
			dao.deleteMemberById(id);
		}
		//마일리지 범위로 조회
		public ArrayList<MemberTO> searchMemberByMileageRange(int sMileage, int eMileage) throws SQLException{
			return dao.selectMemberByMileageRange(sMileage, eMileage);
		}
		//이름으로 회원 조회
		public ArrayList<MemberTO> searchMemberByName(String name) throws SQLException{
			return  dao.selectMemberByName(name);
		}
}












